/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package apresentacao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
//import java.util.logging.Level;
//import java.util.logging.Logger;

/**
 *
 * @author Pedro
 * @author Thiago
 */
public class InteracaoBanco {
    
    //private final String db = "jdbc:derby://localhost:1527/testeApres";
    //private final String user = "teste";
    //private final String passwd = "teste";
    
    private String db = "jdbc:mysql://143.106.150.216:3306/SatodaDB?zeroDateTimeBehavior=convertToNull";
    private String user = "satoda";
    private String passwd = "adotas2014";
    
    public void initDriver () {
        System.out.println("Iniciando driver");
        
        try{
            
            Class.forName("org.apache.derby.jdbc.ClientDriver");
            //Class.forName("com.mysql.jdbc.Driver");
        } catch(ClassNotFoundException e){
            System.err.println(e);
            //System.exit(1);
        }
        
    }
    
    public ArrayList<String> getTodasElet (int codigoCurso, String anoCatalogo) {
        ArrayList<String> arr = new ArrayList<>();
        
        try{
//            String query = "SELECT DISTINCT Codigo FROM TESTE.ELETIVASPORCURSO WHERE Curso = " +
//                    codigoCurso + " AND Ano = " + anoCatalogo;
            String query = "SELECT DISTINCT Codigo FROM SatodaDB.ELETIVASPORCURSO WHERE Curso = " +
                    codigoCurso + " AND Ano = " + anoCatalogo;
            ResultSet rs = execQuery(query);
            
            // adiciona todas as eletivas para o curso e o ano de catalogo
            while (rs.next()) {
                String s = rs.getString("Codigo");
                if (s != null) {
                    arr.add(s);
                }
                else {
                    System.err.println("Codigo da eletiva nulo, gerado erroneamente.");
                }
            }
        } catch(SQLException e){
            System.err.println(e);
            arr.clear();
        }
        
        // Ou arr tem a resposta ou arr esta vazio.
        return arr;
    }
    
    public int getQtdFamilia (String discip) {
        int qtdFamilia = 0;
        try{
//            String query = "SELECT * FROM TESTE.PREREQ WHERE Disciplina = '" + discip + "' ORDER BY familia DESC";
            String query = "SELECT * FROM SatodaDB.PREREQ WHERE Disciplina = '" + discip + "' ORDER BY familia DESC";
            ResultSet rs = execQuery(query);
            
            if (rs.next()) {
                /* Como a query esta em ordem decrescente de familia,
                o 1o resultado eh a qtd de familias */
                qtdFamilia = rs.getInt("familia");
            }
        } catch(SQLException e){
            System.err.println(e);
        }
        
        // Ou qtdFamilia tem a resposta ou eh 0.
        return qtdFamilia;
    }
    
    public ArrayList<String> getListaPreReq (String discip, int familia) {
        
        ArrayList<String> arr = new ArrayList<>();
        
        try{
//            String query = "SELECT * FROM TESTE.PREREQ WHERE Disciplina = '" +
//                    discip + "' AND familia = " + familia;
            String query = "SELECT * FROM SatodaDB.PREREQ WHERE Disciplina = '" +
                    discip + "' AND familia = " + familia;
            ResultSet rs = execQuery(query);
            
            while (rs.next()) {
                String s = rs.getString("PreReq");
                if (s != null) {
                    arr.add(s);
                }
                else {
                    System.err.println("Pre-requisito da materia nulo, gerado erroneamente.");
                }
            }
        } catch(SQLException e){
            System.err.println(e);
            arr.clear();
        }
        
        // Ou arr tem a resposta ou arr esta vazio.
        return arr;
    }
    
    public String getNomeDiscip (String codigoDiscip) {
        String nome = "";
        
        try{
//            String query = "SELECT Nome FROM Teste.EletivasPorCurso WHERE Codigo = '" +
//                    codigoDiscip + "'";
            String query = "SELECT Nome FROM SatodaDB.ELETIVASPORCURSO WHERE Codigo = '" +
                    codigoDiscip + "'";
            ResultSet rs = execQuery(query);
            
            if (rs.next()) {
                nome = rs.getString("Nome");
            }
        } catch(SQLException e){
            System.err.println(e);
            nome = "";
        }
        
        // Ou nome tem a resposta ou nome = "".
        return nome == null ? "" : nome;
    }
    
    private ResultSet execQuery (String query) throws SQLException {
        try{
            Connection con = DriverManager.getConnection(db, user, passwd);
            Statement stmt = con.createStatement();
            
            ResultSet rs = stmt.executeQuery(query);
            return rs;
        } catch(SQLException e) {
            throw e;
        }
    }
    
}

/*
CASO DE TESTE

Disciplinas Cursadas:
MC102
MC202
MA327
MC346
MC302
ME323
EA721
EA614

Todas as Eletivas possiveis:
* MC896 -> prereq: MC346
* MC959 -> prereq: AA200
* MC949 -> prereq: MA327 / ME323
* MC930 -> prereq: MA327  MC202
* MC906 -> prereq: MA327 MC346 ME210 / MA327 MC336 ME203 / MA327 MC336 ME323

* EA826 -> prereq: EA721
* EA954 -> prereq: MC102 / MA327
* EE881 -> prereq: EA614 ME323

*/
